
//1.es5原型写法
// function Person(name,age){
//     this.name = name;
//     this.age = age;
// }
// Person.prototype.sayInfo = function(){
//     console.log(`${this.name}是${this.age}岁`)
// }
// const liLei = new Person('Lilei',20);
// liLei.sayInfo()
////LiLei是20岁

//2.es6中class
// class Person{
//     constructor(name,age){
//         this.name = name;
//         this.age = age;
//     }
//     sayInfo(){
//         console.log(`${this.name}是${this.age}岁`)
//     }
// }
// const liLei = new Person('LiLei',21)
// console.log(liLei.sayInfo())
//LiLei是20岁

//3.class继承
// class Student{
//     constructor(name){
//         this.name = name;
//     }
//     sayName(){
//         console.log(this.name)
//     }
//     testFn(){
//         console.log('我是父类的函数！')
//     }
// }
// class Worker extends Student{
//     sayWork(){
//         console.log(this.name)
//     }
//     testFn(){
//         console.log('我是子类的函数')
//     }
// }
// const person = new Worker('liLei')
// person.sayName()
// person.sayWork()
// person.testFn()
//输出：
//liLei
//liLei
//我是子类的函数！

//4.super关键字
// class Student{
//     constructor(name){
//         this.name = name;
//     }
//     testFn(){
//         console.log('我是父类的函数！')
//     }
// }
// class Worker extends Student{
//     constructor(name,age,sex){
//         super(name);
//         this.age = age;
//         this.sex = sex;
//     }
//     testFn(){
//         super.testFn();
//         console.log("年龄"+this.age)
//         console.log("性别"+this.age)
//         console.log('我是子类的函数')
//     }
// }
// const person = new Worker('liLei','20')
// person.testFn()
// 我是父类的函数！
// 年龄20
// 性别20
// 我是子类的函数

//5.static关键字
class Person{
    static sayName(){
        console.log('我是static函数')
    }
}
class Student extends Person{

}
const student = new Student();
Person.sayName();
Student.sayName();
student.sayName();
// 我是static函数
// 我是static函数
// student.sayName is not a function